package com.ahorresas.controllers;

import com.ahorresas.modelo.daos.AhorroDao;
import com.ahorresas.modelo.beans.AhorroBean;
import java.io.IOException;
import java.sql.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AhorroController extends HttpServlet {

    private final AhorroDao ahorroDao = new AhorroDao();
    private String id_ahorro;
    private String cliente;
    private String fecha_inicio;
    private String vigencia;
    private String estado;
    private int resultado;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        /*Control del boton accionado desde la página JSP*/
        String accion = request.getParameter("accion");
        if (accion == null) {
            accion = "";
        }

        id_ahorro = request.getParameter("id_ahorro");
        cliente = request.getParameter("cliente");
        fecha_inicio = request.getParameter("fecha_inicio");
        vigencia = request.getParameter("vigencia");
        estado = request.getParameter("estado");

        AhorroBean ahorro = null;
        String validacion = "";
        resultado = 0;

        switch (accion) {
            case "consultar":
                validacion = obligatorios(false);
                if (validacion.length() > 0) {
                    mantenerDatos(request);
                    request.setAttribute("msg", validacion);
                } else {
                    ahorro = ahorroDao.buscarAhorro(id_ahorro);
                    if (ahorro != null) {
                        llenarCampos(request, ahorro);
                        request.setAttribute("msg", "El Ahorro fué encontrado con éxito");
                    } else {
                        request.setAttribute("msg", "El Ahorro no pudo ser encontrado");
                    }
                }
                break;
            case "guardar":
                validacion = obligatorios(true);
                if (validacion.length() > 0) {
                    mantenerDatos(request);
                    request.setAttribute("msg", validacion);
                } else {
                    ahorro = ahorroDao.buscarAhorro(id_ahorro);
                    if (ahorro != null) {
                        ahorro.setCliente(cliente);
                        ahorro.setFechaInicio(Date.valueOf(fecha_inicio));
                        ahorro.setVigencia(Integer.valueOf(vigencia));
                        ahorro.setEstado(estado);

                        resultado = ahorroDao.modificarAhorro(ahorro);
                    } else {
                        ahorro = new AhorroBean();
                        ahorro.setIdAhorro(Integer.valueOf(id_ahorro));
                        ahorro.setCliente(cliente);
                        ahorro.setFechaInicio(Date.valueOf(fecha_inicio));
                        ahorro.setVigencia(Integer.valueOf(vigencia));
                        ahorro.setEstado(estado);

                        resultado = ahorroDao.crearAhorro(ahorro);
                    }

                    if (resultado == 1) {
                        llenarCampos(request, null);
                        request.setAttribute("msg", "El ahorro fué guardado con éxito.");
                    } else {
                        request.setAttribute("msg", "El ahorro no pudo ser guardado.");
                    }
                }
                break;
            case "eliminar":
                validacion = obligatorios(false);
                if (validacion.length() > 0) {
                    mantenerDatos(request);
                    request.setAttribute("msg", validacion);
                } else {
                    resultado = ahorroDao.eliminarAhorro(Integer.valueOf(id_ahorro));
                    if (resultado == 1) {
                        llenarCampos(request, null);
                        request.setAttribute("msg", "El ahorro fué eliminado con éxito");
                    } else {
                        request.setAttribute("msg", "El ahorro no pudo ser eliminado.");
                    }
                }
                break;
            case "listar":
                List<AhorroBean> listaAhorros = ahorroDao.listarAhorros();
                request.setAttribute("lista", listaAhorros);
                break;
        }

        request.getRequestDispatcher("./jsp/ahorro.jsp").forward(request, response);
    }

    public String obligatorios(boolean guardado) {
        StringBuilder resultado = new StringBuilder();
        if (id_ahorro == null || id_ahorro.equals("")) {
            resultado.append("El campo 'codigo de ahorro' no debe estar vacío. <br>");
        } else {
            try {
                Integer.valueOf(id_ahorro);
            } catch (NumberFormatException e) {
                resultado.append("El campo 'codigo de ahorro' debe ser numérico. <br>");
            }
        }

        /* Si es guardado de datos valida los demás campos de lo contrario 
         * retorna la validación sobre el clave 
         */
        if (!guardado) {
            return resultado.toString();
        }

        if (cliente.equals("00")) {
            resultado.append("Debe seleccionar una de las opciones de 'Cliente'. <br>");
        }
        if (fecha_inicio == null || fecha_inicio.equals("")) {
            resultado.append("El campo 'Fecha de Inicio de Ahorro' no debe estar vacío. <br>");
        }
        if (vigencia == null || vigencia.equals("")) {
            resultado.append("El campo 'Vigencia' no debe estar vacío. <br>");
        }
        if (estado == null || estado.equals("")) {
            resultado.append("El campo 'Estado' no debe estar vacío. <br>");
        }
        return resultado.toString();
    }

    public void llenarCampos(HttpServletRequest request, AhorroBean prestamo) {
        request.setAttribute("id_ahorro", prestamo != null ? prestamo.getIdAhorro() : "");
        request.setAttribute("cliente", prestamo != null ? prestamo.getCliente() : "");
        request.setAttribute("fecha_inicio", prestamo != null ? prestamo.getFechaInicio() : "");
        request.setAttribute("vigencia", prestamo != null ? prestamo.getVigencia() : "");
        request.setAttribute("estado", prestamo != null ? prestamo.getEstado() : "");
    }

    public void mantenerDatos(HttpServletRequest request) {
        request.setAttribute("id_ahorro", id_ahorro != null ? id_ahorro : "");
        request.setAttribute("cliente", cliente != null ? cliente : "");
        request.setAttribute("fecha_inicio", fecha_inicio != null ? fecha_inicio : "");
        request.setAttribute("vigencia", vigencia != null ? vigencia : "");
        request.setAttribute("estado", estado != null ? estado : "");
    }
}
